// 凑成面值为 11 的最少硬币个数可以由一下三者的最小值得到
// 凑成面值为 10 的最少硬币个数 + 面值为 1 的这一枚硬币；
// 凑成面值为 9 的最少硬币个数 + 面值为 2 的这一枚硬币；
// 凑成面值为 6 的最少硬币 + 面值为 5 的这一枚硬币

const coinChange = (coins, amount) => {
  const dp = new Array(amount + 1).fill(Infinity);
  dp[0] = 0;
  for (let i = 1; i <= amount; i++) {
    for (const coin of coins) {
      if (i >= coin) {
        dp[i] = Math.min(dp[i], dp[i - coin] + 1);
      }
    }
  }
  return dp[amount] === Infinity ? -1 : dp[amount];
};
